import java.io.BufferedReader;  
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.FileWriter;
import java.io.PrintWriter;

public class Principal {

        private static AnalizadorSintactico analizador;    
        private static Token token;
        
        public static void main(String [ ] args)
        {
                try
                {
                        if (args.length >= 1)
                        {       
                                //entra con el input nomas, CUIDADO CON COMO PONER LAS BARRAS EN LA DIRECCION LAS QUE VAN SON /////
                                
                                String input= args[0];
                                try
                                {
                                        BufferedReader buffer = null; 
                                        buffer = new BufferedReader(new FileReader(input));
                                        
                                        analizador= new AnalizadorSintactico(buffer);
                                        
                                        
                                }catch(IOException e){
                                         System.out.println("La ruta de archivo ingresada es invalida.");
                                        
                                }
                                
                                
                                
                                if(args.length == 2)
                                //tiene archivo de salida
                                {
		                        String output= args[1];
		                        File archivo = new File(output);
		                        BufferedWriter salida = new BufferedWriter(new FileWriter(archivo));
		                        try
                                        {                                                                
                                        	String resultado= analizador.analize();
                                        		salida.write(resultado);
                                                salida.close();
                                        }
                                        catch(Exception e){ 
                                        	System.out.println(e.getMessage());
                                                salida.close();
                                        }


                                }
                                else
                                {
                                        //tiene un archivo de salida por defecto con el nombre del archivo de entrada
                                        
                                        String [] nombreArchivo= input.split("\\.");
                                        File archivo = new File(nombreArchivo[0]+".ceiasm");
                                        BufferedWriter salida = new BufferedWriter(new FileWriter(archivo));
                                        try
                                        {                                                                
                                        	String resultado= analizador.analize();
                                        	salida.write(resultado);
                                            salida.close();
                                        }
                                        catch(Exception e){ 
                                        	//e.printStackTrace();
                                        	System.out.println(e.getMessage());
                                                salida.close();
                                        }
                                }       
                        }       
                        else
                                //error
                                throw new Exception(" Para ejecutar el programa se debera ingresar por lo menos el archivo en codigo fuente que desea compilar./n Opcionalmente puede ingresar un archivo para la salida. /n Compilador <IN_FILE> [<OUT_FILE>] ");
                                
                }catch (Exception e) {
            System.out.println(e.getMessage());
                }
                        
        }
        

}